﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Common;
using System.Linq.Expressions;

namespace Neotic.DataAccess.Sql
{
    /// <summary>
    /// Abstraction d'une condition SQL avec utilisation des Expression c# (ex c => C1 == 2)
    /// </summary>
    public interface ISqlCondition 
    {
        /// <summary>
        /// Serialize la condition en code SQL
        /// </summary>
        /// <param name="cmdParams">Parametres de remplacement de la condition</param>
        /// <returns>Sql généré</returns>
        string ToSql(DbParameterCollection cmdParams);

        /// <summary>
        /// Transforme un expression C# en ISqlCondition
        /// Si l'expression n'est pas valide, la valeur de retour doit être null
        /// </summary>
        /// <param name="predicate"></param>
        /// <returns>La condition SQL si predicate et </returns>
        ISqlCondition ParseExpression(Expression<Func<ISqlCondition, object>> predicate);

        ExpressionType? MyExpressionType { get; }
    }
}
